package code.c04_String.BF;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/10/15 22:31
 * @package code.c04_String.BF
 * @description 文件说明
 */

public class BFTest {
    /**
     * BF 算法Java实现
     * @param str 主串
     * @param sub 子串
     * @return 如果匹配成功，则返回子串在主串中的第一个元素的下标，如果匹配不成功，则返回 -1
     */
    public static int BF(String str,String sub){
        if (str == null || sub == null || str.length() == 0 || sub.length() == 0){
            return -1;
        }

        int i = 0; // 遍历主串
        int j = 0; // 遍历子串

        while (i < str.length()&& j < sub.length()){

            if (str.charAt(i) == sub.charAt(j)){ // 对应元素相同
                i ++;
                j ++;
            }else { // 对应元素不相同
                // 顺序不可交换
                i = i-j +1;
                j = 0;
            }
        }

        // 当子串全部被遍历完成之后，则说明 模式匹配 成功
        if (j >= sub.length()){
            return i- j;
        }

        // 否则返回 -1
        return -1;
    }
    public static void main(String[] args) {
        System.out.println(BF("ABASDFSDFSDSDFSDF","SDF"));
    }
}
